package ar.uba.dc.tlen.src.test;

import java.util.ArrayList;
import java.util.TreeSet;

import ar.uba.dc.tlen.src.exceptions.InvalidProductionException;
import ar.uba.dc.tlen.src.production.Produccion;
import ar.uba.dc.tlen.src.symbols.Caracter;
import ar.uba.dc.tlen.src.symbols.NoTerminal;

public class Pruebas {

	/**
	 * @param args
	 * @throws InvalidProductionException 
	 */
	public static void main(String[] args) throws InvalidProductionException {
		System.out.println("Just starting");
		//Chequear Caracter
		NoTerminal pepe = new NoTerminal("Pepe");
		System.out.println(pepe.getNombre());
		Caracter suan = new NoTerminal("Suan");
		System.out.println(suan.getNombre());
		// Chequear la produccion
		ArrayList<Caracter> lista = new ArrayList<Caracter>();
		for (int i= 0; i<10;i++){
			pepe= new NoTerminal("pepe"+i);
			lista.add(pepe);		
		}
		Produccion prod = new Produccion(suan,lista);
		//el no terminal de lado izquierdo
		System.out.println("el noTerminal izq es"+prod.getIzquierda().getNombre());
		//muestro la produccion de lado derecho
		System.out.println("Los de la derecha(en orden):");
		for(int i=0; i<prod.getDerecha().size(); i++){
			System.out.println(prod.getDerecha().get(i).getNombre());
		}

		Caracter actual;
		TreeSet<Caracter> derActual;
		TreeSet<Caracter> izqActual;
		System.out.println("Ahora por cada caracter en la produccion muestro a " +
		"los que tiene a su izq y derecha");
		for(int i=0; i<prod.getDerecha().size(); i++){
			actual = prod.getDerecha().get(i);
			derActual= actual.getDerecha();
			izqActual= actual.getIzquierda();
			System.out.println("el nodo actual es: "+actual.getNombre());
			System.out.println("a la derecha tiene");
			if(derActual.isEmpty()){
				System.out.println("vacio");
			}
			else
			{
				for(int j=0; j<derActual.size(); j++){
					System.out.println(derActual.first().getNombre());
				}
			}
			System.out.println("a la izquierda tiene");
			if (izqActual.isEmpty()) 
			{
				System.out.println("vacio");
			}
			else{
				for(int j=0; j<izqActual.size(); j++){
					System.out.println(izqActual.first().getNombre());
				}
			}
		}
	}
}
